3 marca
21:27 2007
Update: Zobacz też Projekt xswingx
Wyobraźmy sobie, że mamy JPanel, na którym znajdule się pole tekstowe i przycisk (obrazek 1). Nie wygląda to zbyt ładnie :-)

Na drugim screenshocie jest już znacznie lepiej. Ale jak wstawić przycisk do pola tekstowego?

Cała sztuczka polega na podmianie ramki (Border) pola tekstowego, oraz ustawieniu odpowiednich właściwości przycisku :-)
// panel z polem tekstowym i przyciskiem
JPanel panel = new JPanel(new BorderLayout());
JTextField text = new JTextField("Hello, World");
JButton button = new JButton();
button.setIcon(new ImageIcon(getClass().getResource("clear_left.png")));
panel.add(text);
panel.add(button, BorderLayout.EAST);
// przeniesienie ramki z pola tekstowego na panel Border textBorder = text.getBorder(); text.setBorder(null); panel.setBorder(textBorder); // zmiana właściwości przycisku button.setBackground(text.getBackground()); button.setBorderPainted(false); button.setContentAreaFilled(false); button.setMargin(new Insets(1, 1, 1, 1)); // mniejszy margines button.setOpaque(true);
Dodatkowo można ustawić button.setUI(new javax.swing.plaf.metal.MetalButtonUI());, żeby dobrze współgrało ze stylami Windows, oraz button.setRequestFocusEnabled(false);, żeby po kliknięciu na przycisku, focus pozostawał w polu tekstowym.
Proszę o komentarz
Sprytne :>, ale szkoda, że ja nie umiem Javy :)
I tak brzydkie. Za mało marginesu, za duży pasek tytułowy.
Heh, przez cały semestr męczenia Javy na studiach brakowało mi możliwości podpięcia pliku CSS i klepnięcia najzwyklejszego w świecie JPanel#header{margin-left: 40px; height: 200px;} #JButton{font-weight:bold;} itp. :)
A tu proszę, w Javie też się da wszystko załatwić delikatnie manipulując tłem i ramkami ;)
Tomasz Topa: nie tylko Ty o tym pomyślałeś ;) http://www.jaxxframework.org/wiki/CSS
Ja to robię ciut inaczej, mianowicie „wkładam” pole tekstowe w przycisk, tak żeby przycisk otaczał JTextField. Twoje też ładne, no i trochę prostsze…