JavaSwingでアプリケーションを作成しました。
アプリケーションは、 3つのタブ付きペインJFrame
を備えたJTabbedPane
です。
最初のペインには進行状況チェックボックスがあります。チェックボックスが選択されている場合、別のペインをクリックすると、2番目または3番目のペインにERROR
「タブ付き1が進行中です」というメッセージが表示されます。
問題は、進行状況チェックボックスが選択されているときに他のペインをクリックすると、最初に選択したペインに移動し、次にリダイレクトのみが機能し、エラーメッセージが2回実行されることです。
どういうわけかエラーメッセージの2回の実行を防ぎましたが、進行状況チェックボックスがクリックされたときにクリックされたペインに移動するのを防ぐことはできません。
誰かがこの問題の解決策を教えてもらえますか?
私の完全なコードを以下に示します。
import javax.swing.JOptionPane;
public class sample extends javax.swing.JFrame {
public static int status=0;
public sample() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
tab = new javax.swing.JTabbedPane();
jDesktopPane2 = new javax.swing.JDesktopPane();
jLabel1 = new javax.swing.JLabel();
progress = new javax.swing.JCheckBox();
jDesktopPane4 = new javax.swing.JDesktopPane();
jLabel2 = new javax.swing.JLabel();
jDesktopPane5 = new javax.swing.JDesktopPane();
jLabel3 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
tab.setTabLayoutPolicy(javax.swing.JTabbedPane.SCROLL_TAB_LAYOUT);
tab.setTabPlacement(javax.swing.JTabbedPane.LEFT);
tab.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
tabStateChanged(evt);
}
});
jDesktopPane2.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.background"));
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel1.setText("TABBED PANE 1 BODY ");
jLabel1.setBounds(50, 60, 230, 40);
jDesktopPane2.add(jLabel1, javax.swing.JLayeredPane.DEFAULT_LAYER);
progress.setText("Progress");
progress.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
progressItemStateChanged(evt);
}
});
progress.setBounds(50, 40, 90, 23);
jDesktopPane2.add(progress, javax.swing.JLayeredPane.DEFAULT_LAYER);
tab.addTab("Tabbed Pane 1", jDesktopPane2);
jDesktopPane4.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.background"));
jLabel2.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel2.setText("TABBED PANE 2 BODY ");
jLabel2.setBounds(30, 90, 230, 40);
jDesktopPane4.add(jLabel2, javax.swing.JLayeredPane.DEFAULT_LAYER);
tab.addTab("Tabbed Pane 2", jDesktopPane4);
jDesktopPane5.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.background"));
jLabel3.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel3.setText("TABBED PANE 3 BODY ");
jLabel3.setBounds(60, 160, 230, 40);
jDesktopPane5.add(jLabel3, javax.swing.JLayeredPane.DEFAULT_LAYER);
tab.addTab("Tabbed Pane 3", jDesktopPane5);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tab, javax.swing.GroupLayout.PREFERRED_SIZE, 402, javax.swing.GroupLayout.PREFERRED_SIZE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tab, javax.swing.GroupLayout.DEFAULT_SIZE, 315, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
private void progressItemStateChanged(java.awt.event.ItemEvent evt) {
if(progress.isSelected())
setStatus(1);
else
setStatus(0);
}
private void tabStateChanged(javax.swing.event.ChangeEvent evt) {
int o=getStatus();
if(o==1)
{
JOptionPane.showMessageDialog(null, "Tabbed 1 Progress!!!", "Confirmation!!!",JOptionPane.ERROR_MESSAGE);
setStatus(0);
tab.setSelectedIndex(0);
setStatus(1);
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
sample s= new sample();
s.setLocationRelativeTo(null);
s.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JDesktopPane jDesktopPane2;
private javax.swing.JDesktopPane jDesktopPane4;
private javax.swing.JDesktopPane jDesktopPane5;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JCheckBox progress;
private javax.swing.JTabbedPane tab;
// End of variables declaration
public static void setStatus(int i) {
status=i;
}
public static int getStatus()
{
return status;
}
}