私はSwingを学んでいて、練習として自分用のサンプルGUIを作成しました。非常に基本的で、の西側、中央側、および東側に3つのパネルがありJFrame
ます。最後のパネルには、別のパネルとボタンがあります。パネルは、の私の拡張JPanel
ですDrawPanel
。その下のボタンRectangle
がクリックされるたびにランダムに描画されます。これは私のコードです:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Tester
{
public static DrawPanel panelEastDrawPanelCenter;
public static void main()
{
Tester gui = new Tester();
gui.go();
}
public void go()
{
JFrame frame = new JFrame("This is the title");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create all the Western Panel components
JPanel panelWest = new JPanel();
// panelWest.setLayout(new BorderLayout());
JButton panelWestButtonWest = new JButton("Western-most West Button");
JButton panelWestButtonCenter = new JButton("Western-most Center Button");
JButton panelWestButtonEast = new JButton("Western-most East Button");
// Create all Center Panel components
JPanel panelCenter = new JPanel();
panelCenter.setBackground(Color.darkGray);
JButton panelCenterButtonCenter = new JButton("Center Button");
// Create all East Panel components
JPanel panelEast = new JPanel();
panelEastDrawPanelCenter = new DrawPanel();
panelEastDrawPanelCenter.setSize(50,50);
JButton panelEastButtonSouth = new JButton("Repaint");
panelEastButtonSouth.addActionListener(new panelEastButtonSouthListener());
// Add everything to the GUI
// West Panel
frame.getContentPane().add(BorderLayout.WEST, panelWest);
panelWest.add(BorderLayout.WEST, panelWestButtonWest);
panelWest.add(BorderLayout.CENTER, panelWestButtonCenter);
panelWest.add(BorderLayout.EAST, panelWestButtonEast);
// Center Panel
frame.getContentPane().add(BorderLayout.CENTER, panelCenter);
panelCenter.add(BorderLayout.CENTER, panelCenterButtonCenter);
// East Panel
frame.getContentPane().add(BorderLayout.EAST, panelEast);
panelEast.add(panelEastDrawPanelCenter);
panelEast.add(panelEastButtonSouth);
frame.pack();
//frame.setSize(frame.getWidth(), 500);
frame.setVisible(true);
}
class panelEastButtonSouthListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
panelEastDrawPanelCenter.repaint();
}
}
class DrawPanel extends JPanel // JPanel that displays a rectangle upon clicking the button "Repaint"
{
public void paintComponent(Graphics g)
{
g.setColor(Color.WHITE); // Removes previous rectangle
g.fillRect(0,0, this.getWidth(),this.getHeight());
g.setColor(randColor()); // Puts a new rectangle on screen, rand size and color
int height = (int)(Math.random() * this.getHeight());
int width = (int)(Math.random() * this.getHeight());
int x = (int)(Math.random() * 20);
int y = (int)(Math.random() * 20);
g.fillRect(x,y, height,width);
}
public Color randColor()
{
int r = (int)(Math.random() * 255);
int g = (int)(Math.random() * 255);
int b = (int)(Math.random() * 255);
return new Color(r, g, b);
}
}
}
私が遭遇している問題はsetSize()
、DrawPanel
オブジェクト(panelEastDrawPanelCenter
)を50×50に明示的に指定しているにもかかわらず、プログラムを実行すると、それ(DrawPanel
)がボタンの横にある小さなパネルであり、panelEast(およびDrawPanel
ボタンのコンテナー)がまだ残っていることです。同じ幅(そして決して広くなることはありません)。私は私が言うことができることを理解しています
frame.pack();
frame.setSize(frame.getWidth(), 500);
イーストパネルをまたはのいずれかのレイアウトを使用するように設定するBorderLayout
とBoxLayout
、DrawPanel
表示が大きくなります。
DrawPanel
しかし、オブジェクトのサイズを設定しても実際にはサイズが変更されない理由と、私が行ってもオブジェクトが小さいままである理由はわかりません。setSize(50,50);
- 中央のパネルのサイズ変更を停止して、東側のパネルのサイズを変更して幅を広くできるようにするにはどうすればよいですか?または、Eastパネルのサイズを変更するにはどうすればよいですか?