Programim dhe zhvillim, javascript, python, php, html

Si të keni JPanel të palosshëm/zgjerueshëm në Java Swing

Unë dua një JPanel që mund të paloset ose zgjerohet kur përdoruesi klikon në një tekst/ikonë në kufirin e tij. Më duhet ky lloj paneli për shkak të ngushtimit të hapësirës në aplikacionin tim.

Kam lexuar për klasën CollapsiblePanel, por nuk jam i sigurt se si ta përdor atë.. Mendoj se SwingX duhet të shkarkohet, por nuk e gjeta askund.

Për më tepër, do të ishte më mirë nëse e gjeja zgjidhjen për këtë në Java Swing bazë.


  • Më nevojitet ky lloj paneli për shkak të mungesës së hapësirës në aplikacionin tim. Ka mënyra të tjera për të vendosur shumë kontrolle në një GUI. JTabbedPane, JSplitPane, CardLayout, JDesktopPane/JInternalFrame .. Përndryshe, mund të ketë më shumë kuptim të hapen kontrollet shtesë në një (ndoshta modale) JDialog, ose JOptionPane. 18.11.2011
  • @AndrewThompson - ne jemi në Swing, kështu që sigurisht që ka shumë mundësi, por: JXCollapsible/JXTaskPane është shumë e lezetshme :-) 18.11.2011
  • @kleopatra po prisja që ju të dilni dhe të adresoni pyetjen aktuale të OP. Sapo mendova t'i bëja të vetëdijshëm se ka një bollëk mundësish. :) 18.11.2011
  • Faleminderit Andrew për kontributin tuaj. Mora atë që kërkoja nga SwingX. Megjithatë, misteri për kryerjen e gjërave të ngjashme duke përdorur vetëm Swing ende nuk është përgjigjur. Do të rikthehem në këtë nëse kërkohet.. Faleminderit djema !! 20.11.2011

Përgjigjet:


1

nuk jam i sigurt se ku ke kërkuar, por nuk është aq e vështirë për t'u gjetur - edhe duke pasur parasysh rrëmujën e infrastrukturës në të cilën ndodhemi ;-)

Shkoni në shtëpinë e projektit të SwingX, më pas ndiqni lidhjen në paragrafin e parë në seksionin e shkarkimit (barebone), poshtë tek lëshimet\1.6.2. Asgjë e veçantë për vetë pajisjet e palosshme, vetëm kontejnerë për të vendosur komponentët.

18.11.2011
  • Pajtohem. Aktualisht po rishkruhet pjesa më e madhe e GUI-së tonë me komponentët SwingX. Ruan rreth gjysmën e kodit për përshtatjen e komponentëve standardë Swing. 18.11.2011
  • Faleminderit kleopatra.. Kam bibliotekën SwingX... e importuar dhe po e përdor tani. Më pëlqeu JXTaskPane dhe JXCollapsible :) Nuk i kam eksploruar ende në thellësi të dy panelet e vështira. Ajo që po kërkoja është diçka e ngjashme me JXTaskPane dhe JXCollapsible. Megjithatë, JXTaskpane u pëlqye më shumë se JXCollapsiblePane pasi paneli i palosshëm kërkon një shkallëzues të jashtëm për t'u zgjeruar dhe palosur. Më korrigjoni nëse e kam gabim. 20.11.2011

  • 2

    Unë mendoj se mund të përdorni një JSplitPane për të trajtuar problemi juaj. Duke shfrytëzuar pronën për të vendosur pozicionin e ndarësit me maturi, ju mund të arrini atë që dëshironi.

    18.11.2011

    3

    Pra, këtu vjen një klasë e vogël thjesht në Swing :) Ky zbatim supozon që titulli të jetë lart majtas...

    import javax.swing.*;
    import javax.swing.border.LineBorder;
    import javax.swing.border.TitledBorder;
    import java.awt.*;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    public class JCollapsiblePanel extends JPanel {
      private TitledBorder border;
      private Dimension visibleSize;
      private boolean collapsible;
    
      public JCollapsiblePanel(String title, Color titleCol) {
        super();
    
        collapsible = true;
    
        border = new TitledBorder(title);
        border.setTitleColor(titleCol);
        border.setBorder(new LineBorder(Color.white));
        setBorder(border);
    
        // as Titleborder has no access to the Label we fake the size data ;)
        final JLabel l = new JLabel(title);
        Dimension size = l.getPreferredSize();
    
        addMouseListener(new MouseAdapter() {
          @Override
          public void mouseClicked(MouseEvent e) {
            if (!collapsible) {
              return;
            }
    
            Insets i = getBorder().getBorderInsets(JCollapsiblePanel.this);
            if (e.getX() < i.left + size.width && e.getY() < i.bottom + size.height) {
              if (visibleSize == null || getHeight() > size.height) {
                visibleSize = getSize();
              }
              if (getSize().height < visibleSize.height) {
                setMaximumSize(new Dimension(visibleSize.width, 20000));
                setMinimumSize(visibleSize);
              } else {
                setMaximumSize(new Dimension(visibleSize.width, size.height));
              }
              revalidate();
              e.consume();
            }
          }
        });
      }
    
      public void setCollapsible(boolean collapsible) {
        this.collapsible = collapsible;
      }
    
      public void setTitle(String title) {
        border.setTitle(title);
      }
    }
    
    23.10.2018
  • Unë u përpoqa të testoja, por ju nuk jepni një shembull. Ju lutemi vendosni kodin, si funksionon zgjidhja juaj. 04.07.2019
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..