私はJFrameといくつかのボタンとテキストフィールドを内部に持っています。私は絶対配置(ヌルレイアウト)を使用しています。私は描画するキャンバスを作成しようとしましたが、キャンバスをコンテナに追加してからフレームに追加しようとすると、キャンバスはすべてのボタンを上書きします。私は両方のボタンが表示されているキャンバスを持っていたい。ボタンとキャンバスをjframeに挿入する方法は? (Java swing)
これは私のコードです:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Gui extends JFrame {
private JLabel labEnterWord;
private JTextField tfWord;
private JButton butOk;
public Gui(String title) {
super(title);
JPanel p = new JPanel();
p.setLayout(null);
//Create components and add them to the container
addComponents(p);
//Add containers to window
getContentPane().add(p);
getContentPane().add(new MyCanvas());
setWindowProperties();
}
private void addComponents(JPanel p) {
labEnterWord = new JLabel("Enter your word:");
labEnterWord.setBounds(100, 60, 200, 30);
labEnterWord.setFont(new Font("Arial", Font.PLAIN, 20));
p.add(labEnterWord);
tfWord = new JTextField();
tfWord.setBounds(100, 100, 100, 25);
tfWord.setFont(new Font("Arial", Font.PLAIN, 14));
p.add(tfWord);
butOk = new JButton("OK");
butOk.setBounds(220, 100, 51, 25);
butOk.addActionListener(new Event());
p.add(butOk);
}
private void setWindowProperties(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setSize(1280, 720);
setResizable(false);
setLocationRelativeTo(null);
}
}
MyCanvasクラス:
import javax.swing.*;
import java.awt.*;
public class MyCanvas extends JPanel {
public void drawing(){
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(500, 200, 200, 200);
}
}
メインクラスは、単にGUIを()を呼び出します。ここで
ヒント:絶対配置を使用するのは魅力的ですが、そうではありません。むしろ、レイアウトマネージャーについて学ぶ初期の痛みを許してください。しかし、私を信じてください:固定サイズのフレームは、最後の千年です;-) – GhostCat
[境界線](https://docs.oracle.com/javase/tutorial/uiswing/components/border.html)を使用してください! –
Java GUIは、異なるロケールの異なるPLAFを使用して、異なるOS、画面サイズ、画面解像度などで動作する必要があります。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 –