JavaのSwingライブラリに問題があります。私はAdmission Class
をJTabbedPane
に追加しました。以下はJTabbedPaneがButtonおよびComboBoxと正常に動作しない
は、私がこれまで試してみました何で...最初のタブ上Button
とComboBox
コンポーネントが動作していないように見えるけど、私はsetLayout(null)
を削除すると、それが動作しているようですが、これは、レイアウトを持つ他の問題につながります:
DBProjectPractice.java
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingConstants;
public class DBProjectPractice extends JFrame {
private Container contentPane;
private String User = null;
public String getUser() {
String user = this.User;
return user;
}
public DBProjectPractice() {
// TODO Auto-generated constructor stub
init();
}
JTabbedPane pane = new JTabbedPane();
JTabbedPane createTabbedPane() { // tab pane init
pane.addTab("text", new Admission()); // 입사 탭의 레이아웃.
pane.addTab("text", new JLabel("text.", JLabel.CENTER));
pane.addTab("text", new JLabel("text.", JLabel.CENTER));
pane.addTab("text", new JLabel("text.", JLabel.CENTER));
return pane;
}
public void init() {
contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout(30, 30));
setTitle("text");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JTabbedPane jtabbedpane = createTabbedPane();
contentPane.add(new Top(), BorderLayout.NORTH);
contentPane.add(jtabbedpane, BorderLayout.CENTER);
setLocationByPlatform(true);
setSize(1600, 1000); // 사이즈 설정 // 가로 세로
setVisible(true); // 표시
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new DBProjectPractice();
}
}
Top.java
import java.awt.Font;
import java.awt.Graphics;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JPanel;
class Top extends JPanel{
@Override
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
Date date = new Date();
SimpleDateFormat text = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
Font f = new Font("Times", Font.BOLD, 15);
g.setFont(f);
g.drawString("text : " , 100, 25);
g.drawString("text : " + text.format(date), 1200, 25);
this.setSize(1600, 30);
}
}
Admission.java
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.EtchedBorder;
public class Admission extends JPanel {
private Container pane;
public Admission() {
// TODO Auto-generated constructor stub
setLayout(null);
Admission_Button();
FixLable_JLabel();
ComboBox();
}
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
Font f = new Font("Times", Font.BOLD, 15); // 글꼴 설정
g.setFont(f); // 글꼴 지정
g.drawString(":::: text ::::", 100, 100);
g.drawString(":::: text ::::", 100, 500);
this.setSize(1600, 30);
}
private void Admission_Button() { // 입사 탭의 레이아웃의 버튼
JButton[] Button = new JButton[3];
Button[0] = new JButton(" text ");
Button[1] = new JButton(" text ");
Button[2] = new JButton(" text ");
for(int i = 0; i < 3; i++) {
Button[i].setSize(100,40);
Button[i].setLocation(1065 + i * 120, 130);
add(Button[i]);
}
}
private void FixLable_JLabel() {
JLabel[] FixLabel = new JLabel[15]; // 고정된 label;
String[] FixLabelName = { "text", "text", "text","text","text","text","text","text","text","text",
"text","text","text","text","text"};
EtchedBorder eb = new EtchedBorder(Color.BLACK, Color.GRAY); // 테두리를 넣는다.
int FixLableIndex = 0;
for (String name : FixLabelName) {
FixLabel[FixLableIndex] = new JLabel(name);
FixLabel[FixLableIndex].setHorizontalAlignment(SwingConstants.CENTER); // 가운대 정렬
FixLabel[FixLableIndex].setBorder(eb); // 테두리 추가
FixLabel[FixLableIndex++].setSize(120, 30);
}
for(int i = 0 ; i < 7 ; i++) {
FixLabel[i].setLocation(100,200 + i * 30);
}
int t = 0;
for(int i = 7 ; i < 10 ; i++) {
FixLabel[i].setLocation(550,230 + t++ * 30);
}
FixLabel[10].setLocation(550, 350);
t = 0;
for(int i = 11 ; i < 14 ; i++) {
FixLabel[i].setLocation(1050,230 + t++ * 30);
}
FixLabel[14].setLocation(1050, 350);
for(int i = 0 ; i < 15; i++) {
add(FixLabel[i]);
}
}
private void ComboBox() {
String[] type = {"text", "text","text","text"};
JComboBox<String> typeCombo = new JComboBox<String>();
int num = type.length;
for(int i = 0 ; i < num ; i++) {
typeCombo.addItem(type[i]);
}
typeCombo.setBounds(220, 200, 1200, 30);
typeCombo.setSelectedItem(2);
add(typeCombo);
setVisible(true);
}
}
解決方法:nullレイアウトは使用しないでください。ヌルレイアウトと 'setBounds()'はSwingの初心者にとっては複雑なGUIを作成する最も簡単で最良の方法のように思えるかもしれませんが、Swing GUIを使用すると、より多くの深刻な問題が発生します。 GUIのサイズが変更されるとコンポーネントのサイズが変更されず、拡張または維持するロイヤルウィジェットであり、スクロールペインに配置されたときには完全に失敗し、元のプラットフォームとは異なるすべてのプラットフォームまたは画面解像度ではひどく見えます。 –
これはあなたのGUIがフリーズしていて応答していない理由ではありません。これの説明については下記の答えをご覧ください。 –