我有2個JPanel(LeftPanel和RightPanel)。如何將只讀模式設置爲JPanel
RightPanel有4個JRadioButtons,其中一個通過設置setSelected(true)
進行選擇。
我的要求是以只讀模式顯示RightPanel。
你能幫我解決這個問題嗎?
JPanel RightPanel=new JPanel();
RightPanel.removeMouseListener(null);
示例代碼會有幫助。
我有2個JPanel(LeftPanel和RightPanel)。如何將只讀模式設置爲JPanel
RightPanel有4個JRadioButtons,其中一個通過設置setSelected(true)
進行選擇。
我的要求是以只讀模式顯示RightPanel。
你能幫我解決這個問題嗎?
JPanel RightPanel=new JPanel();
RightPanel.removeMouseListener(null);
示例代碼會有幫助。
最簡單的選擇是你在JPanel
內的所有組件上做setEnabled(false);
。您還可以使用setEditable(false);
作爲文本組件,如JTextField
,JTextArea
,JEditorPanel
。
如果我設置的setEnabled(false)來選擇JRadioButton組件那麼它西港島線成爲變灰out.Is有什麼辦法像我們之前看到的一樣顯示? –
*「有什麼方法可以像我們以前看到的一樣顯示嗎?」*這會讓用戶感到困惑。我推薦使它變灰。 –
我會建議你看看JLayer
,你可以讓你自己消耗所有的事件。看看教程How to Decorate Components with the JLayer Class。你需要Java 7+來使用這個類。
簡單的例子:
import java.awt.AWTEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayer;
import javax.swing.JPanel;
import javax.swing.plaf.LayerUI;
public class Test {
public static void main(String args []){
JFrame frame = new JFrame();
frame.setTitle("Test checkbox");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.add(new JLabel("Test checkbox"));
JCheckBox checkbox = new JCheckBox();
LayerUI<JComponent> layerUI = new MyLayerUISubclass();
JLayer<JComponent> jlayer = new JLayer<>(checkbox, layerUI);
panel.add (jlayer);
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
static class MyLayerUISubclass extends LayerUI<JComponent>{
@Override
public void installUI(JComponent c) {
super.installUI(c);
JLayer jlayer = (JLayer)c;
jlayer.setLayerEventMask(
AWTEvent.MOUSE_EVENT_MASK |
AWTEvent.KEY_EVENT_MASK
);
}
@Override
public void uninstallUI(JComponent c) {
JLayer jlayer = (JLayer)c;
jlayer.setLayerEventMask(0);
super.uninstallUI(c);
}
@Override
protected void processMouseEvent(MouseEvent e, JLayer l) {
e.consume();
}
@Override
protected void processKeyEvent(KeyEvent e,
JLayer<? extends JComponent> l) {
e.consume();
}
}
}
是的......這正是我想要的。非常感謝 !!! –
@SithikSweetRascal不客氣,考慮接受綠色標記的答案:) – nachokk
你可以去看一下的glassPane,或JLayer消耗事件 – nachokk