0

これは、私が想定していたよりもはるかに困難であることが判明しています。私がしたいのは、この JPanel をフレームの左側に「貼り付ける」ことだけです。これが私がこれまでに持っているものです。(可能であれば GridBagLayout を使用したくありません (私は Java 初心者です))。

labels = new JPanel();
JLabel currentWordLA = new JLabel("Current word:");
JLabel triedLettersLA = new JLabel("Tried letters:");
JLabel triesLeftLA = new JLabel("Tries remaining:");
JButton restart = new JButton("Reset");

labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS));
labels.add(currentWordLA);
labels.add(triedLettersLA);
labels.add(triesLeftLA);
scorePanel.add(labels, BorderLayout.WEST);

編集:申し訳ありませんが、これが完全なコードです。フレーム内のパネル内のパネルのようなものです。フレームを左に揃えようとしています。ありがとう!

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class Hangman {

    JFrame frame;
    private String[] wordList = {
        "computer", "java", "activity", "alaska", "appearance", "article",
        "automobile", "basket", "birthday", "canada", "central", "character",
        "chicken", "chosen", "cutting", "daily", "darkness", "diagram",
        "disappear", "driving", "effort", "establish", "exact",
        "establishment", "fifteen", "football", "foreign", "frequently",
        "frighten", "function", "gradually", "hurried", "identity",
        "importance", "impossible", "invented", "italian", "journey",
        "lincoln", "london", "massage", "minerals", "outer", "paint",
        "particles", "personal", "physical", "progress", "quarter",
        "recognise", "replace", "rhythm", "situation", "slightly",
        "steady", "stepped", "strike", "successful", "sudden",
        "terrible", "traffic", "unusual", "volume", "yesterday"};
    private String mysteryWord;
    private boolean finished = false;
    private boolean won = false;
    private Button a[];

    public static void main(String[] args) {
        Hangman gui = new Hangman();
        gui.go();
    }

    class myDrawPanel extends JPanel {

        public void paintComponent(Graphics g) {
            setBackground(Color.white);
            g.setColor(Color.gray);
            g.fillRect(50, 200, 150, 20);
            g.fillRect(90, 20, 10, 200);
            g.fillRect(90, 20, 60, 10);
            g.setColor(Color.black);
            g.fillRect(145, 20, 5, 25);
        }
    }

    public void go() {
        frame = new JFrame("Hangman");
        JPanel topPanel = new JPanel();
        myDrawPanel noosePanel = new myDrawPanel();
        JPanel bottomPanel = new JPanel();
        JPanel scorePanel = new JPanel();

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(2, 0));
        bottomPanel.setLayout(new GridLayout(0, 2));
        scorePanel.setSize(20, 100);

        noosePanel.setBorder(BorderFactory.createTitledBorder("Your progress."));
        topPanel.setBorder(BorderFactory.createTitledBorder("Your arsenal."));
        scorePanel.setBorder(BorderFactory.createTitledBorder("Your score."));
        frame.add(topPanel);
        frame.add(bottomPanel);
        bottomPanel.add(scorePanel);
        bottomPanel.add(noosePanel);

        //The Stats section.
        JPanel labels = new JPanel();
        JLabel currentWordLA = new JLabel("Current word:");
        JLabel triedLettersLA = new JLabel("Tried letters:");
        JLabel triesLeftLA = new JLabel("Tries remaining:");
        JButton restart = new JButton("Reset");

        labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS));
        labels.add(currentWordLA);
        labels.add(triedLettersLA);
        labels.add(triesLeftLA);
        scorePanel.add(labels, BorderLayout.WEST);

        int i;
        StringBuffer buffer;
        a = new Button[26];
        topPanel.setLayout(new GridLayout(4, 0, 10, 10));

        // create all 26 buttons
        for (i = 0; i < 26; i++) {
            buffer = new StringBuffer();
            buffer.append((char) (i + 65));
            a[i] = new Button(buffer.toString());
            a[i].setSize(100, 100);
            //a[i].addActionListener( this );
            topPanel.add(a[i]);
        }

        frame.setSize(500, 500);
        frame.setResizable(false);
        frame.setVisible(true);
    }
}
4

2 に答える 2

2

次のように、BorderLayout.CENTER に何かを追加してみてください。

    scorepanel.add(new JPanel(), BorderLayout.CENTER); //I guess scorepanel is your frame
    //your code here
于 2012-05-06T11:21:21.143 に答える
2

私はあなたのレイアウトが好きです。あなたの例にいくつかの変更を加えました:

  • 絵を描くだけのようMyDrawPanelです。をオーバーライドすると、たくさん呼び出す代わりにgetPreferredSize使用できます。内で、パネルのとを基準にして描画を行うと、どのサイズでも正しく表示されます。pack()setSize()paintComponentgetWidthgetHeight

  • ラベルに使用JLabel.LEFTし、レイアウトがどこにあるかがわかるように背景色を灰色にしました。ここにもっとあります。

  • のような標準的な命名を使用するとMyDrawPanel、他の人がコードを読みやすくなります。

コード:

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class Hangman {

    JFrame frame;
    private String[] wordList = {
        "computer", "java", "activity", "alaska", "appearance", "article",
        "automobile", "basket", "birthday", "canada", "central", "character",
        "chicken", "chosen", "cutting", "daily", "darkness", "diagram",
        "disappear", "driving", "effort", "establish", "exact",
        "establishment", "fifteen", "football", "foreign", "frequently",
        "frighten", "function", "gradually", "hurried", "identity",
        "importance", "impossible", "invented", "italian", "journey",
        "lincoln", "london", "massage", "minerals", "outer", "paint",
        "particles", "personal", "physical", "progress", "quarter",
        "recognise", "replace", "rhythm", "situation", "slightly",
        "steady", "stepped", "strike", "successful", "sudden",
        "terrible", "traffic", "unusual", "volume", "yesterday"};
    private String mysteryWord;
    private boolean finished = false;
    private boolean won = false;
    private Button a[];

    public static void main(String[] args) {
        Hangman gui = new Hangman();
        gui.go();
    }

    class MyDrawPanel extends JPanel {

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(256, 256);
        }

        @Override
        public void paintComponent(Graphics g) {
            setBackground(Color.white);
            g.setColor(Color.gray);
            g.fillRect(50, 200, 150, 20);
            g.fillRect(90, 20, 10, 200);
            g.fillRect(90, 20, 60, 10);
            g.setColor(Color.black);
            g.fillRect(145, 20, 5, 25);
        }
    }

    public void go() {
        frame = new JFrame("Hangman");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(2, 0));

        JPanel topPanel = new JPanel();
        topPanel.setBorder(BorderFactory.createTitledBorder("Your arsenal."));
        MyDrawPanel noosePanel = new MyDrawPanel();
        noosePanel.setBorder(BorderFactory.createTitledBorder("Your progress."));
        JPanel bottomPanel = new JPanel(new GridLayout(0, 2));
        JPanel scorePanel = new JPanel(new GridLayout());
        scorePanel.setBorder(BorderFactory.createTitledBorder("Your score."));

        frame.add(topPanel);
        frame.add(bottomPanel);
        bottomPanel.add(scorePanel);
        bottomPanel.add(noosePanel);

        //The Stats section.
        JPanel labels = new JPanel();
        labels.setLayout(new BoxLayout(labels, BoxLayout.Y_AXIS));
        labels.setBackground(Color.lightGray);
        JLabel currentWordLA = new JLabel("Current word:", JLabel.LEFT);
        JLabel triedLettersLA = new JLabel("Tried letters:", JLabel.LEFT);
        JLabel triesLeftLA = new JLabel("Tries remaining:", JLabel.LEFT);

        labels.add(currentWordLA);
        labels.add(triedLettersLA);
        labels.add(triesLeftLA);
        scorePanel.add(labels);

        int i;
        StringBuffer buffer;
        a = new Button[26];
        topPanel.setLayout(new GridLayout(4, 0, 10, 10));

        // create all 26 buttons
        for (i = 0; i < 26; i++) {
            buffer = new StringBuffer();
            buffer.append((char) (i + 65));
            a[i] = new Button(buffer.toString());
            //a[i].addActionListener( this );
            topPanel.add(a[i]);
        }
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}
于 2012-05-07T14:18:22.577 に答える