Wygląd JInternalFrame raz jeszcze

0

Nie wiem dlaczego poprzednie moje pytanie o "dekorowanie' klasy JInternalFrame zostało usunięte. To co można "wygooglować" nie rozwiązuje problemu. Otóż JInternalFrame jest umieszczana zazwyczaj wewnątrz JFrame. JFrame jest domyślnie "dekorowana" tak

setDefaultLookAndFeelDecorated(false);

natomiast JInternalFrame tak

setDefaultLookAndFeelDecorated(true);

Jeśli odpowiada mi wygląd Swing, to nie ma problemu bowiem w klasie JFrame jest metoda setDefaultLookAndFeelDecorated, jeśli odpowiada mi wygląd "natywny", to jest problem bo w klasie JInternalFrame tej metody nie ma.
Czy można "udekorować natywnie" JInternalFrame ?

0

public Dimension getPreferredSize(JComponent c) { //-
FontMetrics metrics = Toolkit.getDefaultToolkit().getFontMetrics(
c.getFont());
String tipText = ((JToolTip) c).getTipText();
if (tipText == null) {
tipText = "";
}
BufferedReader br = new BufferedReader(new StringReader(tipText));
String line;
int maxWidth = 0;
Vector v = new Vector();
try {
while ((line = br.readLine()) != null) {
int width = SwingUtilities.computeStringWidth(metrics, line);
maxWidth = (maxWidth < width) ? width : maxWidth;
v.addElement(line);
}
} catch (IOException ex) {
ex.printStackTrace();
}
int lines = v.size();
if (lines < 1) {
strs = null;
lines = 1;
} else {
strs = new String[lines];
int i = 0;
for (Enumeration e = v.elements(); e.hasMoreElements(); i++) {
strs[i] = (String) e.nextElement();
}
}
int height = metrics.getHeight() * lines;
this.maxWidth = maxWidth;
return new Dimension(maxWidth + 6, height + 4);
}
}


0

Jesteś pewien, że to jest odpowiedź na moje pytanie ?

0

Zawsze możesz dać systemowy wygląd:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
0

Ten sposób za bardzo zmienia wygląd programu. Ja bym chciał tylko żeby belki tytułowe w JFrame oraz JInternalFrame wyglądały tak samo (platformowo). Inne okna (np. JFileChooser) mają mieć wygląd Swing.
Jak się nie korzysta z JInternalFrame, to taki wygląd można uzyskać.

0

Możesz spróbować dziedziczyć po klasie
javax.swing.plaf.basic.BasicInternalFrameUI

Lub po prostu:

iFrame = new JInternalFrame();
iFrame.setUI( new BasicInternalFrameUI(iFrame) );
iFrame.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
0

Sprawdziłem drugi sposób, niestety nie działa.
pozdrawiam
Najpierw sprawdzam, potem zastanawiam się dlaczego nie działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1