사용자가 항상 내용을 선택할 수있는 JTextPane을 갖고 싶습니다. 따라서 나는 JTextPane의 자체 하위 클래스를 만들고 "isEnabled()"메서드에서 항상 true를 반환합니다. 또한 나는 새로운 멤버가 올바른 전경색을 반환 할 책임이있는 m_enabled 도입 문제는 현재 전경색은 변경되지 않는다는 것입니다JTextPane이 올바른 전경색을 표시하지 않음
public class StylesExample1 {
public static final String text = "Lorem ipsum dolor...";
public static boolean m_enabled = true;
public static void main(String[] args) throws BadLocationException {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception evt) {
}
JFrame f = new JFrame("Frame");
final JTextPane pane = new MyPane();
pane.setText(text);
pane.setPreferredSize(new Dimension(200, 200));
f.getContentPane().add(pane);
JButton b = new JButton("Toggle Enabled state");
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
m_enabled = !m_enabled;
System.err.println("setting textpane enabled to " + m_enabled);
pane.setEnabled(m_enabled);
}
});
f.getContentPane().add(b);
f.getContentPane().setLayout(new FlowLayout());
f.setSize(400, 300);
f.setVisible(true);
}
}
class MyPane extends JTextPane {
private static final long serialVersionUID = 1L;
private boolean m_enabled = true;
public void setEnabled(boolean enabled) {
m_enabled = enabled;
}
@Override
public Color getForeground() {
if (m_enabled) {
System.err.println("foreground color: " + super.getForeground());
return super.getForeground();
} else {
System.err.println("foreground color: " + getDisabledTextColor());
return getDisabledTextColor();
}
}
@Override
public boolean isEnabled() {
return true;
}
}
(비활성화/활성화). 텍스트 팬이 비활성화되어있을 때마다 항상 표시됩니다. 그러나 "getForeground에"의 디버그 정보는 말하는
setting textpane enabled to true
foreground color: javax.swing.plaf.ColorUIResource[r=0,g=0,b=0]
setting textpane enabled to false
foreground color: javax.swing.plaf.ColorUIResource[r=109,g=109,b=109]
이 나에게 좋아 보이지만, 어떤 아이디어를 가지고 마십시오 textpane 항상
을 달 수 보이는 다음?
클릭 버튼을 세 번 시도 할 수 당신은 발견 할 것이다 그것은'전경색 : javax.swing.plaf.ColorUIResource [R = 109, G = 109, B = 109] '에 대한 모든 후속 클릭. – Braj